package com.dm.learn.java;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class AAA {
	private static HashMap<String, int[]> listOffsets = new HashMap<String, int[]>();

	public static void run(List<List<String>> dimvalue, List<String> result,
			int layer, String curstring) {
		// 大于一个集合时：
		if (layer < dimvalue.size() - 1) {
			// 大于一个集合时，第一个集合为空
			if (dimvalue.get(layer).size() == 0)
				run(dimvalue, result, layer + 1, curstring);
			else {
				for (int i = 0; i < dimvalue.get(layer).size(); i++) {
					StringBuilder s1 = new StringBuilder();
					s1.append(curstring);
					s1.append(dimvalue.get(layer).get(i));
					run(dimvalue, result, layer + 1, s1.toString());
				}
			}
		}
		// 只有一个集合时：
		else if (layer == dimvalue.size() - 1) {
			// 只有一个集合，且集合中没有元素
			if (dimvalue.get(layer).size() == 0)
				result.add(curstring);
			// 只有一个集合，且集合中有元素时：其笛卡尔积就是这个集合元素本身
			else {
				for (int i = 0; i < dimvalue.get(layer).size(); i++) {
					result.add(curstring + dimvalue.get(layer).get(i));
				}
			}
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<List<String>> dimvalue = new ArrayList<List<String>>();
//		List<String> v1 = new ArrayList<String>();
//		v1.add("0 ");
//		v1.add("12 ");
//		List<String> v2 = new ArrayList<String>();
//		v2.add("0 ");
//		v2.add("4 ");
//		v2.add("8 ");
//		List<String> v3 = new ArrayList<String>();
//		v3.add("0 ");
//		v3.add("1 ");
//		v3.add("2 ");
//		v3.add("3 ");
//
//		dimvalue.add(v1);
//		dimvalue.add(v2);
//		dimvalue.add(v3);

//		List<String> result = new ArrayList<String>();
//
//		run(dimvalue, result, 0, "");
//
//		int i = 1;
//		for (String s : result) {
//			System.out.println(s);
//		}
		// ///////////////////////////////////////////////////
		listOffsets.put("A1", new int[] { 0, 12 });
		listOffsets.put("A2", new int[] { 0, 4, 8 });
		listOffsets.put("A3", new int[] { 0, 1, 2, 3 });
		Set<String> key = listOffsets.keySet();
		List<String>v=null;
		for (Iterator it = key.iterator(); it.hasNext();) {
			String s = (String) it.next();
//			System.out.println(listOffsets.get(s));
			v = new ArrayList<String>();
			for (int j = 0; j <listOffsets.get(s).length; j++) {
				v.add(listOffsets.get(s)[j]+" ");
			}
			dimvalue.add(v);
		}
		List<String> result = new ArrayList<String>();

		run(dimvalue, result, 0, "");

		for (String s : result) {
//			System.out.println(s);
			String[] ss = s.split(" ");
			int rr = 0;
			for (int i = 0; i < ss.length; i++) {
				rr+=Integer.valueOf(ss[i]);
			}
			System.out.println(rr);
		}
	}

}
